package org.example.quartz.util;



import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JsonUtil {

        // 用于存储特殊字符及其对应的转义字符映射，可按需扩展
        private static Map<String, String> specialCharMap = new HashMap<>();

        static {
            // 初始化常见特殊字符转义映射，比如JSON中常用的双引号转义等
            specialCharMap.put("\"", "\\\"");
            specialCharMap.put("\\", "\\\\");
            specialCharMap.put("\n", "\\n");
            specialCharMap.put("\r", "\\r");
            specialCharMap.put("\t", "\\t");
        }

        /**
         * 对输入字符串中的特殊字符进行转义处理
         *
         * @param input 要处理的输入字符串
         * @return 转义处理后的字符串
         */
        public static String escapeSpecialChars(String input) {
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < input.length(); i++) {
                String currentChar = input.substring(i, i + 1);
                if (specialCharMap.containsKey(currentChar)) {
                    result.append(specialCharMap.get(currentChar));
                } else {
                    result.append(currentChar);
                }
            }
            return result.toString();
        }

        /**
         * 反转义已经转义过的特殊字符，还原字符串原始内容
         *
         * @param input 包含转义特殊字符的字符串
         * @return 反转义后的字符串
         */
        public static String unescapeSpecialChars(String input) {
            for (Map.Entry<String, String> entry : specialCharMap.entrySet()) {
                input = input.replace(entry.getValue(), entry.getKey());
            }
            return input;
        }

        /**
         * 检查字符串中是否包含需要转义的特殊字符
         *
         * @param input 要检查的字符串
         * @return 如果包含特殊字符则返回true，否则返回false
         */
        public static boolean containsSpecialChars(String input) {
            for (String specialChar : specialCharMap.keySet()) {
                if (input.contains(specialChar)) {
                    return true;
                }
            }
            return false;
        }

        /**
         * 使用正则表达式替换自定义特殊字符（可扩展用于更复杂场景）
         * 例如，替换所有数字为特定字符（这里只是示例，可按需修改规则）
         *
         * @param input 输入字符串
         * @param target 要替换的目标字符（这里用正则表达式的形式，比如 "\\d" 表示数字）
         * @param replacement 替换后的字符
         * @return 替换后的字符串
         */
        public static String replaceSpecialCharsByRegex(String input, String target, String replacement) {
            Pattern pattern = Pattern.compile(target);
            Matcher matcher = pattern.matcher(input);
            return matcher.replaceAll(replacement);
        }
    }


